package com.dy.design_pattern_study.design_pattern_principles;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-03-13
 * @Content 依赖倒转（倒置）原则：就是依赖接口，不依赖具体的类（利于拓展）
 * 抽象不应该依赖细节，细节应该依赖于抽象（接口描述的大概 -啥品牌的都能用）
 * 针对接口编程，不要对实现编程（不必考虑具体的实际品牌来针对性的进行编程）
 * <p>依赖倒转的标准
 * A.高层模块不应该依赖低层模块。两个都应该依赖抽象（简单的说就是代码之间不弱耦合-甚至不耦合）
 * B.抽象不应该依赖细节。细节应该依赖抽象（这里的抽象指接口，接口是一个大概描述的功能，
 * 并没有实际指某某品牌的XXX才能使用。）
 * 这里可以用一个很形象的例子
 * 电脑的硬盘与 CPU，高层模块CUP不依赖于硬盘（他们不耦合），如果硬盘坏了，更换硬盘电脑还能使用
 * 如果高层模块依赖底层模块（他们耦合），那么就是硬盘坏了，要跟着CPU一起更换
 * <p>功能
 * 依赖倒转其实可以说是面向对象设计的标志，用哪种语言来编写程序不重要，
 * 如果编写时考虑的都是如何针对抽象编程而不是针对细节编程，
 * 即程序中所有的依赖关系都是终止于抽象类或者接口，那就是面向对象的设计，反之那就是过程化的设计了
 * 总结
 * 简单的说这个依赖倒转，就是基于现实的倒转，本来说电脑需要CPU、硬盘等组合起来才能用，实现中他们是
 * 互相依赖的
 * 这个依赖倒转就是让他们不要依赖（作为功能模块互不依赖），
 * 而是去依赖抽象的接口（设计时的思想-这个抽象也是 抽象一个硬盘，而不是一个具体的硬盘）
 * 这样依赖抽象，在编程时不会具体到实际的物件，这样任意物件都能来作为替代品
 * 任意模块有问题都不会影响到其他的模块
 */
public class DependenceInversionPrinciple {
}
